/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Presenter;

import Model.Empleado;
import Model.Turno;
import Principals.Utils;
import java.util.*;
import DAO.EmpleadoDAO;
import DAO.ParametroDAO;
import DAO.PerfilDAO;
import DAO.TurnoDAO;
import Model.Parametro;
import Model.Perfil;
import Model.Usuario;
import Principals.EnviadorMail;
import Principals.GeneradorPassword;
import java.awt.Rectangle;
import java.io.File;
import javax.swing.JProgressBar;

/**
 *
 * @author sebastian
 */
public class EmpleadoPresenter {
    public static JProgressBar barrita ;
    
    public static List<Empleado> empleadosDisponibles() {
        List<Empleado> lstEmpleados;
        List<Turno> lstTurnos;
        lstEmpleados = EmpleadoDAO.empleadosDisponibles();
        lstTurnos = TurnoDAO.listTurno();
        //ahora verificamos cuales de los empleados activos tienes disponibilidad de turno
        //buscamos cual es el id turno del turno activo actualmente
        int idTurnoActivo = 0;
        Date fechaActual = new Date();
        Date inicioTurno;
        Date finTurno;
        // ESTO SE PUEDE HACER EN EL QUERY DE TURNOS
        for (int i = 0; i < lstTurnos.size(); i++) {
            inicioTurno = lstTurnos.get(i).getHoraInicio();
            finTurno = lstTurnos.get(i).getHoraFin();
            if (Utils.betweenDate(inicioTurno, finTurno, fechaActual)) {
                idTurnoActivo = lstTurnos.get(i).getIdTurno();
            }
        }
        //en la lista de Empleados, se depura con solo aquellos que tienen turno disponible
        for (int i = 0; i < lstEmpleados.size(); i++) {
            if (lstEmpleados.get(i).getTurno().getIdTurno() != idTurnoActivo) {
                lstEmpleados.remove(i);
            }
        }
        return lstEmpleados;
    }

    public static void registrarEmpleado(String apPat, String apMat, String nombres, String nroDoc, String correo, String telefono, String direccion, Turno turno, Parametro tipoVehiculo, Perfil perfil, String nroBrevete) {
        String pass = GeneradorPassword.getPassword();
        String nUsuario;
        if (apPat.replaceAll(" ", "").length() > 8) {
            nUsuario = nombres.toLowerCase().replaceAll(" ", "").charAt(0) + apPat.toLowerCase().replaceAll(" ", "").substring(0, 8) + apMat.toLowerCase().replaceAll(" ", "").charAt(0);
        } else {
            nUsuario = nombres.toLowerCase().replaceAll(" ", "").charAt(0) + apPat.toLowerCase().replaceAll(" ", "") + apMat.toLowerCase().replaceAll(" ", "").charAt(0);
        }
        Usuario usr = UsuarioPresenter.registrarUsuario(nUsuario, perfil, pass);
        try {
            EnviadorMail sender = new EnviadorMail(correo, "Sistema de Planificación - Registro en el sistema", "Por favor iniciar sesión con los siguientes datos:\n\n\tUsuario: " + usr.getUsuario() + "\n\tContraseña: " + pass + "\n\nAl iniciar sesión se le solicitará realizar el cambio de contraseña.");
        } catch (Exception ex) {
            System.out.println("Error en el envio de correo de nueva contraseña: " + ex.toString());
        }

        Empleado emp = new Empleado();
        emp.setApellidoPaterno(apPat);
        emp.setApellidoMaterno(apMat);
        emp.setNombres(nombres);
        emp.setNroDocumento(nroDoc);
        emp.setCorreo(correo);
        emp.setTelefono(telefono);
        emp.setDireccion(direccion);
        emp.setTurno(turno);
        emp.setTipoVehiculo(tipoVehiculo);
        emp.setUsuario(usr);
        emp.setNroBrevete(nroBrevete);
        emp.setEstado(1);
        EmpleadoDAO.registrarEmpleado(emp);
    }

    public static List<Empleado> buscarEmpleado(String apPaterno, String apMaterno, String nombre, String docIdentidad, Perfil perfil, int estado) {
        try {
            if (nombre.isEmpty()) {
                nombre = null;
            }
            if (apPaterno.isEmpty()) {
                apPaterno = null;
            }
            if (apMaterno.isEmpty()) {
                apMaterno = null;
            }
            if (docIdentidad.isEmpty()) {
                docIdentidad = null;
            }
            List<Empleado> lstEmpleadoTemp = new ArrayList();
            lstEmpleadoTemp = EmpleadoDAO.buscarEmpleado(nombre, apPaterno, apMaterno, docIdentidad, estado);
            if (perfil != null){
                List<Empleado> lstEmpleados = new ArrayList();
                for (Empleado e : lstEmpleadoTemp) {
                    if (e.getUsuario().getPerfil().getNombre().equals(perfil.getNombre())) {
                        lstEmpleados.add(e);
                    }
                }
                System.out.println("Empleados encontrados: "+lstEmpleados.size());
                return lstEmpleados;
            }
            System.out.println("Empleados encontrados: "+lstEmpleadoTemp.size());
            return lstEmpleadoTemp;
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
            return null;
        }
    }

    public static Empleado cargarEmpleado(int idEmpleado) {
        return EmpleadoDAO.cargarEmpleado(idEmpleado);
    }

    public static void modificarEmpleado(Empleado e, String apPat, String apMat, String nombres, String nroDoc,
            String correo, String telefono, String direccion, Turno turno, Parametro tipoVehiculo, Perfil perfil,
            String nroBrevete) {
        e.setApellidoMaterno(apPat);
        e.setApellidoPaterno(apMat);
        e.setNombres(nombres);
        e.setNroDocumento(nroDoc);
        e.setCorreo(correo);
        e.setTelefono(telefono);
        e.setDireccion(direccion);
        e.setTurno(turno);
        e.setTipoVehiculo(tipoVehiculo);
        e.getUsuario().setPerfil(perfil);
        e.setNroBrevete(nroBrevete);

        EmpleadoDAO.modificarEmpleado(e);
    }

    public static void eliminarEmpleado(Empleado e) {
        e.setEstado(0);

        EmpleadoDAO.modificarEmpleado(e);
    }

    public static Empleado existeDocId(String dni) {
        try {
            return EmpleadoDAO.existeDocId(dni);
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
            return null;
        }
    }

    public static void registrarEmpleado(String path) {
        try {
            Scanner sc = new Scanner(new File(path));
            int N = Integer.parseInt( sc.nextLine() ) ;
            double cantidad = 100.0 / (double)N ;
            for(int i = 0 ; i < N ; i++){
                String nombre = sc.nextLine(); // nombre
                String apPaterno = sc.nextLine(); // ap paterno
                String apMaterno = sc.nextLine(); // ap materno
                String direccion = sc.nextLine(); // direccion
                String telefono = sc.nextLine(); // telefono
                String correo = sc.nextLine(); // correo
                String dni = sc.nextLine(); // dni
                Turno turno = TurnoDAO.getTurnoById(Integer.parseInt(sc.nextLine())); // turno
                Parametro tipoVehiculo = ParametroDAO.cargarParametro(Integer.parseInt(sc.nextLine())); // tipo vehiculo
                String nroBrevete = sc.nextLine(); // nro brevete
                Perfil perfil = PerfilDAO.buscarPerfil(Integer.parseInt(sc.nextLine()));

                String pass = GeneradorPassword.getPassword();
                Usuario usr = UsuarioPresenter.registrarUsuario(dni, perfil, pass);

                Empleado emp = new Empleado();
                emp.setNombres(nombre);
                emp.setApellidoPaterno(apPaterno);
                emp.setApellidoMaterno(apMaterno);
                emp.setDireccion(direccion);
                emp.setTelefono(telefono);
                emp.setCorreo(correo);
                emp.setNroDocumento(dni);
                emp.setTurno(turno);
                emp.setTipoVehiculo(tipoVehiculo);
                emp.setNroBrevete(nroBrevete);
                emp.setUsuario(usr);
                emp.setEstado(1);
                EmpleadoDAO.registrarEmpleado(emp);
                
                double value = i * cantidad ;
                barrita.setValue( (int)value ) ;
                Rectangle progress = barrita.getBounds() ;
                progress.x = 0 ;
                progress.y = 0 ;
                barrita.paintImmediately( progress ) ;
            }
            barrita.setValue( 100 ) ;
            Rectangle progress = barrita.getBounds() ;
            progress.x = 0 ;
            progress.y = 0 ;
            barrita.paintImmediately( progress ) ;
        } catch (Exception e) {
            System.out.println("Error en carga masiva de empleados: " + e);
        }
    }
}
